/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.notaria.guerrasalas.beans;

import gob.satt.beans.AbstractController;
import java.io.File;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author Emmanuel
 */
public class ExploradorArchivosController extends AbstractController {

    private String nombreServidor;
    private String rutaInicial;
    private String rutaSeleccionada;
    private String rutaAnterior;

    private String caller;

    public ExploradorArchivosController() {
        generarRutaInicial();
        getHostname();
    }

    public List<SelectItem> getListaDirectorios() {
        try {
            if (rutaSeleccionada == null) {
                if (rutaAnterior != null && !rutaAnterior.isEmpty()) {
                    rutaSeleccionada = rutaAnterior;
                } else {
                    rutaSeleccionada = rutaInicial;
                }
                return procesarRuta(rutaSeleccionada, true);
            } else {
                return procesarRuta(rutaSeleccionada, true);
            }
        } catch (Exception e) {
            ArrayList<SelectItem> select = new ArrayList<SelectItem>();
            select.add(new SelectItem(rutaInicial, "---ERROR AL CREAR LISTA DE DIRECTORIOS---"));
            rutaSeleccionada = rutaInicial;
            return select;
        }
    }

    public List<SelectItem> getListarArchivos() {
        try {
            if (rutaSeleccionada == null) {
                if (rutaAnterior != null && !rutaAnterior.isEmpty()) {
                    rutaSeleccionada = rutaAnterior;
                } else {
                    rutaSeleccionada = rutaInicial;
                }
                return procesarRuta(rutaSeleccionada, false);
            } else {
                return procesarRuta(rutaSeleccionada, false);
            }
        } catch (Exception e) {
            ArrayList<SelectItem> select = new ArrayList<SelectItem>();
            select.add(new SelectItem(rutaInicial, "---ERROR AL CREAR LISTA DE DIRECTORIOS---"));
            rutaSeleccionada = rutaInicial;
            return select;
        }
    }

    public void generarRutaInicial() {
        String os = System.getProperty("os.name").toLowerCase();
        if (os.contains("windows")) {
            rutaInicial = "C:\\";
        } else {
            rutaInicial = "/";
        }
    }

    public void reiniciar() {
        rutaSeleccionada = null;
        rutaAnterior = null;
        generarRutaInicial();
    }

    public ArrayList<SelectItem> procesarRuta(String ruta, boolean soloCarpetas) {
        File root = new File(ruta);
        rutaAnterior = root.getParent();
        if (root.isDirectory()) {
            File[] children = root.listFiles();
            ArrayList<SelectItem> subFiles = new ArrayList<SelectItem>();
            ArrayList<File> soloArchivos = new ArrayList<File>();
            if (subFiles == null) {
                subFiles.add(new SelectItem(rutaAnterior, "No es posible mostrar el contenido de esta carpeta.", "", true));
                return subFiles;
            } else {
                if (children.length > 0) {
                    for (File f : children) {
                        if (f.isDirectory()) {
                            subFiles.add(new SelectItem(f.getAbsolutePath(), f.getName() + "\\"));
                        } else {
                            soloArchivos.add(f);
                        }
                    }
                } else {
                    subFiles.add(new SelectItem(rutaAnterior, "|--Esta ruta no tiene sub carpetas o archivos--|", "", true));
                }

                for (File f : soloArchivos) {
                    subFiles.add(new SelectItem(f.getAbsolutePath(), f.getName(), "", soloCarpetas));
                }
                return subFiles;
            }
        } else {
            if (soloCarpetas) {
                rutaSeleccionada = rutaAnterior;
            }
            return procesarRuta(rutaAnterior, soloCarpetas);
        }
    }

    public void getHostname() {
        try {
            setNombreServidor(InetAddress.getLocalHost().getHostName());
        } catch (Exception e) {
            error(e);
        }
    }

    public String subirNivel() {
        if (rutaAnterior != null) {
            rutaSeleccionada = rutaAnterior;
        }
        return "";
    }

    public String cambiarRutaInicial() {
        if (rutaInicial != null && !rutaInicial.isEmpty()) {
            rutaSeleccionada = rutaInicial;
        }
        return "";
    }

    public void processValueChange(ValueChangeEvent ce) {
        Object nuevoValor = (String) ce.getNewValue();
        if (nuevoValor != null) {
            setRutaSeleccionada(String.valueOf(nuevoValor));
        }
    }

    public String obtenerCaller(){
        
        return "";
    }

    public String getNombreServidor() {
        return nombreServidor;
    }

    public void setNombreServidor(String nombreServidor) {
        this.nombreServidor = nombreServidor;
    }

    public String getRutaAnterior() {
        return rutaAnterior;
    }

    public void setRutaAnterior(String rutaAnterior) {
        this.rutaAnterior = rutaAnterior;
    }

    public String getRutaInicial() {
        return rutaInicial;
    }

    public void setRutaInicial(String rutaInicial) {
        this.rutaInicial = rutaInicial;
    }

    public String getRutaSeleccionada() {
        return rutaSeleccionada;
    }

    public void setRutaSeleccionada(String rutaSeleccionada) {
        this.rutaSeleccionada = rutaSeleccionada;
    }

    public String getCaller() {
        return caller;
    }

    public void setCaller(String caller) {
        this.caller = caller;
    }


}
